/********************************************
    Trabajo Práctico de Laboratorio 3
    Autores:
    2do Cuatrimestre 2012
    Prof: Daniel Barrientos
*************************************************/

#include "headers/jugador.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

void onConnect(Jugador* jugador);


Jugador* Jugador_crear(char* nombre, int socket){
    Jugador* jugador = malloc(sizeof(Jugador));

    jugador->nombre =  (char*)malloc(sizeof(char)*(strlen(nombre)+1));
    strcpy(jugador->nombre, nombre );


    jugador->socketFD = socket;
    jugador->id = rand();
    return jugador;
}

void Jugador_setId(Jugador* jugador, int id){
    jugador->id = id;
}

int Jugador_getId(Jugador* jugador){
    return jugador->id;
}


char* Jugador_getNombre( Jugador* jugador){
    return jugador->nombre;
}

int Jugador_getSocket(Jugador* jugador){
    return jugador->socketFD;
}


void initClient(Jugador* jugador){
    struct sockaddr_in remoteAddress;  // indica el server al cual conectarse
    struct hostent *server; // el hostname del server

    // creo el scoket para conectarme
    int sock = socket(AF_INET, SOCK_STREAM, 0);

    // La dirección a la cual conectarse
    server = gethostbyname(HOST);
    remoteAddress.sin_family = AF_INET;
    remoteAddress.sin_port = htons(CLIENT_PORT);
    //inet_aton(HOST, &remoteAddress.sin_addr);
    bcopy((char *)server->h_addr,
          (char *)&remoteAddress.sin_addr.s_addr,
          server->h_length);


    // me conecto al server
    if( connect(sock, (struct sockaddr*)&remoteAddress,  (socklen_t) sizeof(struct sockaddr_in)) < 0) {
        puts("Error conectandose al servidor");
        exit(EXIT_FAILURE);
    }

    // Seteo el socket al jugador
    jugador->socketFD = sock;
    onConnect(jugador);


}

void onConnect(Jugador* jugador){
    char buffer[512];   // buffer de lectura
    int n;              // contador
    int socket;
    char* nombreJugador;

    puts("[Cliente] se coencto");

    socket = Jugador_getSocket(jugador);
    nombreJugador = Jugador_getNombre(jugador);
    puts(nombreJugador);

    // escribo el nombre del jugador en el server
    write(socket, nombreJugador, strlen(nombreJugador));

    //while(1){
        memset(buffer, '\0', 512);
        n = read(socket, buffer, 512);
        write(1, buffer, n);
    //}

    // Leo opcion desde teclado
    memset(buffer, '\0', 512);
    n = read(0, buffer, 512);
    // escribo opcion en el server
    write(socket, buffer, n);

    //printf("Escribi el mensaje para enviar: ");
    //gets(buffer);       // leo por teclado
    //n = strlen(buffer);
    //write(sock, buffer, n );    // escribo en el socket
}



